package com.jmz.apt.api.exception;

/**
 * Created by fanglexue on 2019/11/4.
 */
public class BusinessException extends RuntimeException {
    /** serialVersionUID */
    private static final long serialVersionUID = -375674075493862238L;

    /** 异常代码 */
    private String code;

    /** 异常消息 */
    private String message;

    /** 是否支持多语言 */
    private boolean isMulLanguage = false;

    /** 多参数值注入到提示信息中 */
    private String[] vars;

    /** 请求消息体 */
    private String lang;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isMulLanguage() {
        return isMulLanguage;
    }

    public void setMulLanguage(boolean isMulLanguage) {
        this.isMulLanguage = isMulLanguage;
    }

    public String[] getVars() {
        return vars;
    }

    public void setVars(String[] vars) {
        this.vars = vars;
    }

    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }

    /**
     * 重写 fillInStackTrace 去除业务异常堆栈信息，提高性能
     *
     * 业务逻辑异常是可预料异常范围，不需要堆栈信息，堆栈信息会大大提高系统开销，影响系统性能
     */
    @Override
    public Throwable fillInStackTrace() {
        return this;
    }

    /**
     *  支持统一业务处理的异常类  支持多语言
     * @param code 业务逻辑错误编码
     * @param message 错误提示信息
     */
    public BusinessException(String code, String message) {
        super();
        this.code = code;
        this.message = message;
    }

//	/**
//	 *  支持统一业务处理的异常类  支持多语言
//	 * @param isMulLanguage true:为支持多语言 false：为不支持
//	 * @param Code 业务逻辑错误编码
//	 * @param vars 业务提示信息中的多个入参变量，用于替换lang-mapping.json中的文本中的变量
//	 */
//	public BusinessException(boolean isMulLanguage, String Code, String... vars) {
//		this.isMulLanguage = isMulLanguage;
//		this.code = Code;
//		this.vars = vars;
//	}

    /**
     *  支持统一业务处理的异常类  支持多语言
     * @param isMulLanguage true:为支持多语言 false：为不支持
     * @param Code 业务逻辑错误编码
     * @param vars 业务提示信息中的多个入参变量，用于替换lang-mapping.json中的文本中的变量
     */
    public BusinessException(boolean isMulLanguage, String lang, String Code, String... vars) {
        this.isMulLanguage = isMulLanguage;
        this.lang=lang;
        this.code = Code;
        this.vars = vars;
    }
    /**
     *  支持统一业务处理的异常类  支持多语言
     * @param vars 业务提示信息中的多个入参变量，用于替换lang-mapping.json中的文本中的变量
     */
    public BusinessException(String... vars) {
        this.vars = vars;
    }

    public BusinessException(BusinessException ex) {
        super(ex);
    }

    public BusinessException(String message) {
        super();
        this.message = message;
    }
}
